﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class area_admin_equipamentos : System.Web.UI.Page
{
    private O solicitacao = new O();
    private ENDERECO Endereco = new ENDERECO();
    private HISTORICO_O His_Os = new HISTORICO_O();
    private MENSAGEN MSG = new MENSAGEN();
    private dbSisInfoDataContext Banco = new dbSisInfoDataContext();

    protected void Page_Load(object sender, EventArgs e)
    {
        Session["Titulo"] = "Solicitacao";

        ViewState["idOS"] = Request.QueryString["a"];

        ViewState["Funcionario"] = 1;

        ViewState["NomeFuncionario"] = "Janynne Gomess";

        // Prencher informacoes da solicitacao
        var dados = from S in Banco.Os
                    where S.idOS == Convert.ToInt32(Request.QueryString["a"])
                    select S;

        
        solicitacao = dados.ToList<O>()[0];

        ViewState["AtendimentoCampo"] = solicitacao.atendimentocampo != null ? solicitacao.atendimentocampo : false;
        lbCodSolicitacao.Text = solicitacao.idOS.ToString();
        lbdataSolicitacao.Text = solicitacao.dtAbertura.ToString();
        lbEquipamento.Text = solicitacao.EQUIPAMENTO.Nome;
        lbDescricaoEquipamento.Text = solicitacao.Problema;
        lbTipoSolicitacao.Text = solicitacao.atendimentocampo != null && (bool)solicitacao.atendimentocampo ? "Atendimento em campo" : "Atendimento em laboratório";

        // Popula com valores
        txtValorTotal.Text = solicitacao.ValorTotal.ToString();
        txtValorPeca.Text = solicitacao.ValorPeca.ToString();
        txtValorDesconto.Text = solicitacao.ValorDesconto.ToString();
        txtValorOS.Text = solicitacao.Valor.ToString();
        
        var endereco = from E in Banco.ENDERECOs
                       where E.idEndereco == solicitacao.idEnderecoEntrega
                       select E;

        if (endereco.ToList<ENDERECO>().Count > 0)
        {
            Endereco = endereco.ToList<ENDERECO>()[0];
            lbEnderecoBuscaEntrega.Text = Endereco.Logradouro + "- n " + Endereco.numero +", "+ Endereco.BAIRRO.Nome+" - "+Endereco.BAIRRO.CIDADE.Nome+", "+Endereco.BAIRRO.CIDADE.ESTADO.Nome ;      
        }

        // Configura filtro do historico
        MostraHistoricoOS();

        // Configura historico de mensagens 
        linqMensagensOS.Where = " idOS =" + ViewState["idOS"].ToString();
        linqMensagensOS.DataBind();
        grdMensagens.DataBind();

       ViewState["ProximaSituacao"] = ProximoPasso(Convert.ToInt32(Request.QueryString["a"]));        
       
    }

    private void MostraHistoricoOS()
    {
        linqHistorico_OS.Where = " idOS =" + ViewState["idOS"].ToString();
        linqHistorico_OS.DataBind();
        grdHistorico.DataBind();
    }

   
    protected void grdEquipamentos_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {

    }
    protected void btnSim0_Click(object sender, EventArgs e)
    {

        grdMensagens.DeleteRow(grdMensagens.SelectedIndex);
        grdMensagens.DataBind();
    }

    protected void grdEquipamentos_RowEditing(object sender, GridViewEditEventArgs e)
    {

    }
   
    protected void btnCancela_Click(object sender, EventArgs e)
    {
        pnlInserir.Visible = false;

       
    }

   
    protected void Button3_Click(object sender, EventArgs e)
    {
      
    }
    protected void btnLancarAvaliacao_Click(object sender, EventArgs e)
    {
        // Manda a mensagem, caso seja atendimento em campo, e a situacao atual seja aguardando atendimento
        if (((bool)ViewState["AtendimentoCampo"]) && (ViewState["ProximaSituacao"].ToString().Trim() == "8"))
        { 
            // Envia mensagem ao cliente, solicitando resposta sobre agendamento da visita
            SalvarMensagem("Olá "+solicitacao.CLIENTE.Nome+", gostariamos de saber qual é seu horário disponível para receber nossa visita técnica. Aguardamos a resposta dessa mensagem.", "Agendamento de Visita");
        }

        // Verificar se a situacao eh 2,3 ou 8
        // e atualizar a OS com o valor informado
        if (ViewState["ProximaSituacao"].ToString() == "3" || ViewState["ProximaSituacao"].ToString() == "2" || ViewState["ProximaSituacao"].ToString() == "8")
        { 
            // atualizar o valor da OS
            solicitacao.Valor = Convert.ToDecimal( txtValorOS.Text);
            solicitacao.ValorDesconto = Convert.ToDecimal(txtValorDesconto.Text);
            solicitacao.ValorPeca = Convert.ToDecimal(txtValorPeca.Text);
            solicitacao.ValorTotal = Convert.ToDecimal(txtValorTotal.Text);

            //Banco.Os.Attach(solicitacao);
            Banco.SubmitChanges();
        }

        LancarHistorico(Convert.ToInt32( ViewState["ProximaSituacao"] ));

        txtObservacao.Text = "";

        MostraHistoricoOS();
                
    }

    private void LancarHistorico(int Situacao)
    {
        // Lançar historico
        His_Os.DataSituacao = DateTime.Now;
        His_Os.idFuncionario = Convert.ToInt32(ViewState["Funcionario"]);
        His_Os.idOS = Convert.ToInt32(Request.QueryString["a"]);
        His_Os.idSituacao = Situacao;

        Banco.HISTORICO_Os.InsertOnSubmit(His_Os);
        Banco.SubmitChanges();

        
        
    }
    protected void TabContainer1_ActiveTabChanged(object sender, EventArgs e)
    {
    }
    protected void btnEnviar_Click(object sender, EventArgs e)
    {

        SalvarMensagem(txtMensagem.Text,ViewState["NomeFuncionario"].ToString());

        // Limpa o texto
        txtMensagem.Text = "";
        txtMensagem.Focus();


    }

    private void SalvarMensagem(string Texto,string Titulo)
    {
        MSG.DataHora = DateTime.Now;
        MSG.idFuncionario = Convert.ToInt32(ViewState["Funcionario"]);
        MSG.idOs = Convert.ToInt32(Request.QueryString["a"]);
        MSG.Texto = Texto;

        // Nome do funcionario
        MSG.Titulo = Titulo;

        Banco.MENSAGENs.InsertOnSubmit(MSG);
        Banco.SubmitChanges();

        // Atualizar lista de mensagens
        grdMensagens.DataBind();
    }
    protected void btnCancelarEnvioMensagem_Click(object sender, EventArgs e)
    {

        // Limpa o texto
        txtMensagem.Text = "";
        txtMensagem.Focus();

    }
    protected void grdMensagens_RowCreated(object sender, GridViewRowEventArgs e)
    {
        string onmouseoverStyle = "this.style.backgroundColor='#FFFFCC';";
       
        string onmouseoutStyle = "this.style.backgroundColor='@BackColor'";

        string rowBackColor = "transparent";

        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            e.Row.Attributes.Add("onmouseover", onmouseoverStyle);

            e.Row.Attributes.Add("onmouseout", onmouseoutStyle.Replace("@BackColor", rowBackColor));

        } 
    }
    protected void grdMensagens_DataBound(object sender, EventArgs e)
    {
        if (grdMensagens.Rows.Count > 0)
        {
            grdMensagens.HeaderRow.Cells[0].Text += " - Quantidade de items: " + grdMensagens.Rows.Count.ToString();
        }
    }

    int ProximoPasso(int OS)
    { 
        // Busca a ultima situacao da OS e verifica qual é o proximo passo
        var dados = (from S in Banco.HISTORICO_Os
                    where S.idOS == OS
                    orderby S.DataSituacao descending
                    select S.idSituacao).Max();

        int UltimaSituacaoOS = Convert.ToInt32(dados), ProximaSituacoaOS = 0;
        

        switch (UltimaSituacaoOS)
        {
            case 1: 
                {
                    if ((Convert.ToBoolean(ViewState["AtendimentoCampo"])))
                    {
                        lbProximoPasso.Text = "Informe o preço total e aguarde agendamento do cliente, via mensagem.";
                        btnLancarAvaliacao.Text = "Lancar avaliação";

                        lbTituloProximoPasso.Text = "Informe ao cliente o preço total que será cobrado pelo serviço.";
                        pnlValores.Enabled = true;
                        ProximaSituacoaOS = 8;

                    }
                    else
                    {                     
                     lbProximoPasso.Text =  "Inicie o atendimento.";
                     btnLancarAvaliacao.Text = "Iniciar atendimento";
                   
                     lbTituloProximoPasso.Text = "Faça uma avaliação sobre a solicitação, informando o preço total do serviço e o prazo previsto de entrega, e aguarde a confirmaçao do cliente.";
                     pnlValores.Enabled = true;
                     ProximaSituacoaOS = 3;
                    
                    }
                   break; 
                }
            case 2: 
                {
                    lbProximoPasso.Text = "O equipamento já se encontra disponível, agora é só iniciar o atendimento.";
                    btnLancarAvaliacao.Text = "Iniciar atendimento";
                    ProximaSituacoaOS = 7;
                    break; 
                }
            case 3:
                {
                    lbProximoPasso.Text = "Você está no atendimento da solicitação. Agora é só finalizar o serviço.";
                    btnLancarAvaliacao.Text = "Finalizar";
                    lbTituloProximoPasso.Text = "Informe a solução encontrada";
                    pnlValores.Enabled = true;
                    ProximaSituacoaOS = 4;
                    break;
                }
            case 4:
                {
                    lbProximoPasso.Text = "Já foi finalizado o atendimento.";
                    btnLancarAvaliacao.Visible = false;
                    txtObservacao.Visible = false;
                    ProximaSituacoaOS = 4;
                     pnlValores.Enabled= false;
                    break;
                }
            case 8:
                {
                    lbProximoPasso.Text = "Aguardando o agendamento da visita.";
                    btnLancarAvaliacao.Visible = false;
                    txtObservacao.Visible = false;
                    ProximaSituacoaOS = 3;
                    pnlValores.Enabled = false;

                    break;
                }
            case 5:
                {
                    lbProximoPasso.Text = "A solicitacao foi cancelada pelo cliente.";
                    btnLancarAvaliacao.Visible = false;
                    txtObservacao.Visible = false;
                    pnlValores.Enabled = false;
                    ProximaSituacoaOS = 5;
                    break;
                }
            case 6:
                {
                    lbProximoPasso.Text = "A solicitacao foi cancelada pela empresa.";
                    btnLancarAvaliacao.Visible = false;
                    txtObservacao.Visible = false;
                    pnlValores.Enabled = false;
                    ProximaSituacoaOS = 6;
                    break;
                }  
        }

        return ProximaSituacoaOS;
    }
    protected void btnCancelar_Click(object sender, EventArgs e)
    {
        LancarHistorico(6);

        MostraHistoricoOS();
    }
}
